#!/usr/bin/env perl

use v5.14;
use utf8::all;

my $saw_blank_lines = 0;

while(<>) {
    if($_ eq "\0\n") {
        print;
        next;
    }

    study;

    s<^ \p{HorizSpace}+><>x;

    # normalize indentation
    s<^ ([*#]+)><':' x length $1>xe;
    s<^ (:+) [*#]+><$1>x;

    s<__(?:FORCE|NO)?TOC__><>gx; # __TOC__
    s<#REDIRECT><>g;             # #REDIRECT [[Link]]

    s<^ (={2,}) ([^=]+) \1 $><--TOPIC MARKER--$2>x; # ===Heading===
    s<'{2,}><>g; # ''italic'' '''bold''' '''''italic bold'''''

    #s<{{ [^|]+ \| ([^}]+) }}><$1>gx; # {{tmpl|args}}
    s<{{ [^}]+ }}><>gx;              # {{tmpl}}

    # [[User:Username]] 11:22, 33 явнваря 4444 (UTC)
    # [[nl:User:Username]] 11:22, 33 явнваря 4444 (UTC)
    s<
        (?: -- | — )?
        \Q[[\E
        (?:[a-z]{2}:)?
        (?: Участник: | Обсуждение участника: | User (?: \s+ talk)?: | Special:Contributions/.+? )
        [^|]+
        \|
        ([^]]+)
        \Q]]\E
        \s+
        (
            [0-9]{2}:[0-9]{2},
            \s+
            [0-9]+
            \s+
            [А-Яа-я]+
            \s+
            [0-9]{4}
            \s+
            \(UTC\)
        )
    ><--SIGNATURE BEGIN--$1--SIGNATURE END-- --DATE BEGIN--$2--DATE END-->gx;

    s<\Q[[\E ([^|]+) \| \Q]]\E><$1>gx;                # [[Link|]]
    s<\Q[[\E [^|]+ \| ([^]]+) \Q]]\E><$1>gx;          # [[Link|Name]]
    s<\Q[[\E :? (?: \p{L}+ :)+ ([^]]+) \Q]]\E><$1>gx; # [[ru:Link name]] [[ru:Namespace:Link]] [[Namespace:Link]] [[:Category:Link]]
    s<\Q[[\E ([^]]+) \Q]]\E><$1>gx;                   # [[Link name]]

    s<\[ ([a-z]{3,}://[^]]+) \]><$1>gx; # [http://link/]

    # squash many EOLs in a row
    if(/^ \s* $/x) {
        print if $saw_blank_lines++ < 2;
    }
    else {
        $saw_blank_lines = 0;
        print;
    }
}

# vim: ft=perl
